iT邦幫忙

2025 iThome 鐵人賽

DAY 29
1

嗨!歡迎回到上班族的命令列生存手冊。上一個章節提到很多好用的指令,這一個單元偏向 Java 開發者,但也歡迎讀者帶著輕鬆的心情閱讀。
以筆者熟悉的 Android 開發來說,需要先安裝 Java 的 JDK 才能進行編譯(近年來改成 Android Studio 也會自帶 JDK 了)。專案一多起來,就會有機會遇到專案需要不同版本的 SDK 才能編譯,這個在大公司或是陳年專案很常見,像是一些 run 很久的專案需要 Java 11 才能編譯(根據目前的當下 Java LTS 已經出到 25)。

要怎麼同時管理多個 Java 版本呢?這個想想就不太容易的事情,只要在 SDKMan 幫助之下就很容易達成。

⚠️ Windows 的使用者需要在 WSL 或是 Git Bash 等有 bash 的環境下才能使用。

安裝 SDKMan

請開啟官網會看到一個安裝用的指令,同樣直接執行即可。(別忘了不要隨意載入來路不明的指令呦。)

$ curl -s "https://get.sdkman.io" | bash

SDKMan 大部分的語法都是以 bash/zsh 為主,用 fish 來執行會水土不符(前幾章強調的,fish 不是使用標準的 POSIX-like Script 語法),不過已經有善心人士寫了 Plugin 給 fish

直接用 fisher 來安裝即可:

$ fisher install reitzig/sdkman-for-fish@v2.1.0

設定好後,嘗試輸入 $ sdk SDKMan 應該會印出使用手冊。

https://ithelp.ithome.com.tw/upload/images/20251013/20141615pxki6HTHkL.png

$ sdk

如何管理 JDK 版本

列出可供使用的版本與安裝

Java JDK 有很多的發行版,除了 Oracle 以外還能找到其他廠商提供的 OpenJDK,像是微軟提供的 Zulu 或是亞馬遜的 Corretto … 等等。

https://ithelp.ithome.com.tw/upload/images/20251013/20141615O2nSPePaWl.png

$ sdk list java

這個指令會列出所有可供安裝的 Java 發行版,這個界面跟 less 一樣的操作方式。
未來安裝各類的 JDK 後,這裡也會標示出目前使用的版本是哪一個。
如果想安裝某個發行版,需要記下目標版本的 Identifier,以 Temurin 的 21.0.8 版作為示範:

# sdk install java <identifier>
$ sdk install java 21.0.8-tem

就能安裝指定版本,安裝結束後會詢問是否要設定成預設的 Java 版本(也就是設定成 JAVA_HOME 指定的版本)。

移除

移除也很容易,只要把 install 改成 uninstall 就行啦!在 SDKMan 裡頭都會需要 identifier 來指定是哪一個版本。

# sdk uninstall java <identifier>
$ sdk uninstall java 21.0.8-tem

設定預設的 Java SDK

分成兩個層面:

  • 目前 Session
  • 整個系統調整

調整目前 Session 的預設 Java

不會動到整個系統,只調整目前 Session,可以用 use

# sdk use java <identifier>
$ sdk use java 21.0.8-tem

整個系統都要調整

就是調整 JAVA_HOME 指向,可以用 default

# sdk default java <identifier>
$ sdk default java 21.0.8-tem

Java 被安裝在哪裡呢?

有時需要手動指定 JDK 的資料夾,會需要知道 SDKMan 把 Java 都放在哪邊。安裝後的 JDK 會被放至於家目錄下的 .sdkman 資料夾,完整的路徑是:

~/.sdkman/candidates/java/

如果 IDE 需要手動調整,在上面的 Java 目錄會看到所有透過 SDKMan 安裝的 JDK,從中挑選即可。

https://ithelp.ithome.com.tw/upload/images/20251013/20141615OWINohQs0o.png

在這裡印出 $ ls -la Long Format,會注意到 current 資料夾只是一個 Symbolic Link(軟連結),指向透過 default 設定過的預設版本。換句話說指定 current 資料夾下的 SDK 版本,就會隨著 SDKMan 調整而動態的變動。

清除暫存檔等垃圾檔案

SDKMan 用久了也很容易藏污納垢,像是下載 JDK 的暫存檔或是已經用不到的 metadata,可以透過 flush 指令來清除這些渣渣:

$ sdk flush

拋磚引玉

不只 Java JDK 有環境管理工具,很多程式語言也有,而且安裝和使用的方式大同小異。不外乎管理多個版本、設定預設版本,通常也分為 Session 和全域調整兩種。有些工具在安裝時需要與 Shell 整合,請查看前一章節介紹 Zoxide 時的設定方式即可。

筆者也推薦讀者可以研究以下工具:

  • pyenv:管理 Python 版本。
  • nvm:用來管理 Node 的版本。
  • rbenv:管理 Ruby 的版本,還記得閃電式開發的 Ruby on Rails 嗎?

不求人管理 Java JDK 篇就到這邊啦,下一個章節就是生活品質篇的最後一篇了,我們要來介紹常常在電視或是 YouTube 裡面看到有人怎麼可以一次顯示那麼多 Shell 在畫面上?下次見囉。


上一篇
Day28 生活品質篇:類固醇劍客 - z, eza, bat
系列文
上班族的命令列 (CLI) 生存手冊29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言